Copyright(C) 1994 Terumasa KODAKA , Takeshi KONO
■キーボードBIOS
用語 キーコード
キーボード上のどのキーの入力かを表す値。8ビットで表現される。
キー番号とほぼ同じだが、一部のキー(ファンクションキー,[HOME CLR],
[XFER],[NFER])は、同時に押されていた[SHIFT],[CTRL]キーの状態で
キーコードが変化する。
関連:表[キーコード・キーデータ]
用語 キーデータ
ASCII/JISコードに準じた値。8ビットで表現される。
文字キー以外のキー(リターンキー,ファンクションキー,矢印キー,[ROLL UP],
[ROLL DOWN],[INS],[DEL],[HOME CLR],[HELP],[STOP],[COPY])が入力された
場合は00hになる。
関連:表[キーコード・キーデータ]
用語 キー番号
キーボード上の全てのキーと一対一に対応する値。7ビットで表現される。
シフト系キー,[STOP],[COPY]キーもキー番号を持っている。
用語 キー入力データ
本書では、キーバッファ内に格納されているデータのことを「キー入力
データ」と呼ぶことにする。キー入力データは、以下のような手順で
キーバッファ内に格納される。
キーボードは、キーが押される(Make)か離される(Break)かすると、
状態が変化したキーのキー番号とMake/Break状態を本体にシリアル
データで送信する。本体側のキーボードインターフェースの8251Aは、
キーボードからのデータを受信すると、キーボード割り込み(INT 09h)を
発生する。
キーボード割り込み(INT 09h)ハンドラは、ノーマルモードでは、受信した
キー番号と現在のシフト状態をキーコードとキーデータに変換し、キー
バッファに格納する。ハイレゾモードでは、受信したキー番号とシフト
状態を、そのままキーバッファに格納する。どちらのモードモードでも、
キー入力データは2バイト一組でキーバッファに格納される。
表 キーコード・キーデータ
---------------+-------------------------------------------------------+----
キー番号 |各シフト状態におけるキーコード(左),キーデータ(右) |対象
+------+------+------+------+------+------+------+------+
(キートップ | |+SHIFT|+CAPS |+CAPS |+カナ |+カナ |+GRPH |+CTRL |
表記) | | | |+SHIFT| |+SHIFT| | |
---------------+------+------+------+------+------+------+------+------+----
00[ ESC ] |00,1B |00,1B |00,1B |00,1B |00,1B |00,1B |00,1B |00,1B |
01[ 1!ヌ ] |01,31 |01,21 |01,31 |01,21 |01,C7 |01,C7 |----- |----- |
02[ 2"フ ] |02,32 |02,22 |02,32 |02,22 |02,CC |02,CC |----- |----- |
03[ 3#アァ ] |03,33 |03,23 |03,33 |03,23 |03,B1 |03,A7 |----- |----- |
04[ 4$ウゥ ] |04,34 |04,24 |04,34 |04,24 |04,B3 |04,A9 |----- |----- |
05[ 5%エェ ] |05,35 |05,25 |05,35 |05,25 |05,B4 |05,AA |05,F2 |----- |
06[ 6&オォ ] |06,36 |06,26 |06,36 |06,26 |06,B5 |06,AB |06,F3 |----- |
07[ 7'ヤャ ] |07,37 |07,27 |07,37 |07,27 |07,D4 |07,AC |07,F4 |----- |
08[ 8(ユュ ] |08,38 |08,28 |08,38 |08,28 |08,D5 |08,AD |08,F5 |----- |
09[ 9)ヨョ ] |09,39 |09,29 |09,39 |09,29 |09,D6 |09,AE |09,F6 |----- |
0A[ 0ワヲ ] |0A,30 |0A,30 |0A,30 |0A,30 |0A,DC |0A,A6 |0A,F7 |----- |
0B[ -=ホ ] |0B,2D |0B,3D |0B,2D |0B,3D |0B,CE |0B,CE |0B,8C |----- |
0C[ ^`ヘ ] |0C,5E |0C,60 |0C,5E |0C,60 |0C,CD |0C,CD |0C,8B |0C,1E |*1
0C[ ^ヘ ] |0C,5E |0C,5E |0C,5E |0C,5E |0C,CD |0C,CD |0C,8B |0C,1E |*2
0D[ ¥|ー ] |0D,5C |0D,7C |0D,5C |0D,7C |0D,B0 |0D,B0 |0D,F1 |0D,1C |
0E[ BS ] |0E,08 |0E,08 |0E,08 |0E,08 |0E,08 |0E,08 |0E,08 |0E,08 |*3
0F[ TAB ] |0F,09 |0F,09 |0F,09 |0F,09 |0F,09 |0F,09 |0F,09 |0F,09 |
10[ Q タ ] |10,71 |10,51 |10,51 |10,71 |10,C0 |10,C0 |10,9C |10,11 |
11[ W テ ] |11,77 |11,57 |11,57 |11,77 |11,C3 |11,C3 |11,9D |11,17 |
12[ E イ ] |12,65 |12,45 |12,45 |12,65 |12,B2 |12,A8 |12,E4 |12,05 |
13[ R ス ] |13,72 |13,52 |13,52 |13,72 |13,BD |13,BD |13,E5 |13,12 |
14[ T カ ] |14,74 |14,54 |14,54 |14,74 |14,B6 |14,B6 |14,EE |14,14 |
15[ Y ン ] |15,79 |15,59 |15,59 |15,79 |15,DD |15,DD |15,EF |15,19 |
16[ U ナ ] |16,75 |16,55 |16,55 |16,75 |16,C5 |16,C5 |16,F0 |16,15 |
17[ I ニ ] |17,69 |17,49 |17,49 |17,69 |17,C6 |17,C6 |17,E8 |17,09 |
18[ O ラ ] |18,6F |18,4F |18,4F |18,6F |18,D7 |18,D7 |18,E9 |18,0F |
19[ P セ ] |19,70 |19,50 |19,50 |19,70 |19,BE |19,BE |19,8D |19,10 |
1A[ @‾ ] |1A,40 |1A,7E |1A,40 |1A,7E |1A,DE |1A,DE |1A,8A |1A,00 |
1B[ [{ ] |1B,5B |1B,7B |1B,5B |1B,7B |1B,DF |1B,A2 |----- |1B,1B |
1C[ RETURN ] |1C,0D |1C,0D |1C,0D |1C,0D |1C,0D |1C,0D |1C,0D |1C,0D |
1D[ A チ ] |1D,61 |1D,41 |1D,41 |1D,61 |1D,C1 |1D,C1 |1D,9E |1D,01 |
1E[ S ト ] |1E,73 |1E,53 |1E,53 |1E,73 |1E,C4 |1E,C4 |1E,9F |1E,13 |
1F[ D シ ] |1F,64 |1F,44 |1F,44 |1F,64 |1F,BC |1F,BC |1F,E6 |1F,04 |
20[ F ハ ] |20,66 |20,46 |20,46 |20,66 |20,CA |20,CA |20,E7 |20,06 |
21[ G キ ] |21,67 |21,47 |21,47 |21,67 |21,B7 |21,B7 |21,EC |21,07 |
22[ H ク ] |22,68 |22,48 |22,48 |22,68 |22,B8 |22,B8 |22,ED |22,08 |
23[ J マ ] |23,6A |23,4A |23,4A |23,6A |23,CF |23,CF |23,EA |23,0A |
24[ K ノ ] |24,6B |24,4B |24,4B |24,6B |24,C9 |24,C9 |24,EB |24,0B |
25[ L リ ] |25,6C |25,4C |25,4C |25,6C |25,D8 |25,D8 |25,8E |25,0C |
26[ ;+レ ] |26,3B |26,2B |26,3B |26,2B |26,DA |26,DA |26,89 |----- |
27[ :*ケ ] |27,3A |27,2A |27,3A |27,2A |27,B9 |27,B9 |27,94 |----- |
28[ }]ム」 ] |28,5D |28,7D |28,5D |28,7D |28,D1 |28,A3 |----- |28,1D |
29[ Z ツッ ] |29,7A |29,5A |29,5A |29,7A |29,C2 |29,AF |29,80 |29,1A |
2A[ X サ ] |2A,78 |2A,58 |2A,58 |2A,78 |2A,BB |2A,BB |2A,81 |2A,18 |
2B[ C ソ ] |2B,63 |2B,43 |2B,43 |2B,63 |2B,BF |2B,BF |2B,82 |2B,03 |
2C[ V ヒ ] |2C,76 |2C,56 |2C,56 |2C,76 |2C,CB |2C,CB |2C,83 |2C,16 |
2D[ B コ ] |2D,62 |2D,42 |2D,42 |2D,62 |2D,BA |2D,BA |2D,84 |2D,02 |
2E[ N ミ ] |2E,6E |2E,4E |2E,4E |2E,6E |2E,D0 |2E,D0 |2E,85 |2E,0E |
2F[ M モ ] |2F,6D |2F,4D |2F,4D |2F,6D |2F,D3 |2F,D3 |2F,86 |2F,0D |
30[ ,<ネ。 ] |30,2C |30,3C |30,2C |30,3C |30,C8 |30,A4 |30,87 |----- |
31[ .>ル。 ] |31,2E |31,3E |31,2E |31,3E |31,D9 |31,A1 |31,88 |----- |
32[ /?メ・ ] |32,2F |32,3F |32,2F |32,3F |32,D2 |32,A5 |32,97 |----- |
33[ _ロ ] |----- |33,5F |----- |33,5F |33,DB |33,DB |----- |33,1F |*4
33[ _ロ ] |33,FC |33,5F |33,FC |33,5F |33,DB |33,DB |----- |33,1F |*5
34[ SPACE ] |34,20 |34,20 |34,20 |34,20 |34,20 |34,20 |34,20 |34,20 |
35[ XFER ] |35,00 |A5,00 |35,00 |A5,00 |35,00 |A5,00 |35,00 |B5,00 |
36[ ROLL UP ] |36,00 |36,00 |36,00 |36,00 |36,00 |36,00 |36,00 |36,00 |*3
37[ ROLL DOWN ]|37,00 |37,00 |37,00 |37,00 |37,00 |37,00 |37,00 |37,00 |*3
38[ INS ] |38,00 |38,00 |38,00 |38,00 |38,00 |38,00 |38,00 |38,00 |
39[ DEL ] |39,00 |39,00 |39,00 |39,00 |39,00 |39,00 |39,00 |39,00 |*3
39[ DEL BS ] |39,08 |39,08 |39,08 |39,08 |39,08 |39,08 |39,08 |39,08 |*6
3A[ ↑ ] |3A,00 |3A,00 |3A,00 |3A,00 |3A,00 |3A,00 |3A,00 |3A,00 |
3B[ ← ] |3B,00 |3B,00 |3B,00 |3B,00 |3B,00 |3B,00 |3B,00 |3B,00 |
3C[ → ] |3C,00 |3C,00 |3C,00 |3C,00 |3C,00 |3C,00 |3C,00 |3C,00 |
3D[ ↓ ] |3D,00 |3D,00 |3D,00 |3D,00 |3D,00 |3D,00 |3D,00 |3D,00 |
3E[ HOME CLR ] |3E,00 |AE,00 |3E,00 |AE,00 |3E,00 |AE,00 |----- |----- |*7
3E[ CLR ] |3E,00 |AE,00 |3E,00 |AE,00 |3E,00 |AE,00 |----- |----- |*8
3F[ HELP ] |3F,00 |3F,00 |3F,00 |3F,00 |3F,00 |3F,00 |3F,00 |3F,00 |*3
40[ - ] |40,2D |40,2D |40,2D |40,2D |40,2D |40,2D |40,2D |40,2D |
41[ / ] |41,2F |41,2F |41,2F |41,2F |41,2F |41,2F |41,2F |41,2F |
42[ 7 ] |42,37 |42,37 |42,37 |42,37 |42,37 |42,37 |42,98 |42,37 |
43[ 8 ] |43,38 |43,38 |43,38 |43,38 |43,38 |43,38 |43,91 |43,38 |
44[ 9 ] |44,39 |44,39 |44,39 |44,39 |44,39 |44,39 |44,99 |44,39 |
45[ * ] |45,2A |45,2A |45,2A |45,2A |45,2A |45,2A |45,95 |45,2A |
46[ 4 ] |46,34 |46,34 |46,34 |46,34 |46,34 |46,34 |46,E1 |46,34 |
47[ 5 ] |47,35 |47,35 |47,35 |47,35 |47,35 |47,35 |47,E2 |47,35 |
48[ 6 ] |48,36 |48,36 |48,36 |48,36 |48,36 |48,36 |48,E3 |48,36 |
49[ + ] |49,2B |49,2B |49,2B |49,2B |49,2B |49,2B |49,E0 |49,2B |
4A[ 1 ] |4A,31 |4A,31 |4A,31 |4A,31 |4A,31 |4A,31 |4A,93 |4A,31 |
4B[ 2 ] |4B,32 |4B,32 |4B,32 |4B,32 |4B,32 |4B,32 |4B,8F |4B,32 |
4C[ 3 ] |4C,33 |4C,33 |4C,33 |4C,33 |4C,33 |4C,33 |4C,92 |4C,33 |
4D[ = ] |4D,3D |4D,3D |4D,3D |4D,3D |4D,3D |4D,3D |4D,96 |4D,3D |
4E[ 0 ] |4E,30 |4E,30 |4E,30 |4E,30 |4E,30 |4E,30 |4E,9A |4E,30 |
4F[ , ] |4F,2C |4F,2C |4F,2C |4F,2C |4F,2C |4F,2C |4F,90 |4F,2C |
50[ . ] |50,2E |50,2E |50,2E |50,2E |50,2E |50,2E |50,9B |50,2E |
51[ NFER ] |51,00 |A1,00 |51,00 |A1,00 |51,00 |A1,00 |51,00 |B1,00 |*9
52[ vf・1 ] |52,00 |C2,00 |52,00 |C2,00 |52,00 |C2,00 |----- |D2,00 |*10
52[ f・11 ] |52,00 |C2,00 |52,00 |C2,00 |52,00 |C2,00 |----- |D2,00 |*11
53[ vf・2 ] |53,00 |C3,00 |53,00 |C3,00 |53,00 |C3,00 |----- |D3,00 |*10
53[ f・12 ] |53,00 |C3,00 |53,00 |C3,00 |53,00 |C3,00 |----- |D3,00 |*11
54[ vf・3 ] |54,00 |C4,00 |54,00 |C4,00 |54,00 |C4,00 |----- |D4,00 |*10
54[ f・13 ] |54,00 |C4,00 |54,00 |C4,00 |54,00 |C4,00 |----- |D4,00 |*11
55[ vf・4 ] |55,00 |C5,00 |55,00 |C5,00 |55,00 |C5,00 |----- |D5,00 |*10
55[ f・14 ] |55,00 |C5,00 |55,00 |C5,00 |55,00 |C5,00 |----- |D5,00 |*11
56[ vf・5 ] |56,00 |C6,00 |56,00 |C6,00 |56,00 |C6,00 |----- |D6,00 |*10
56[ f・15 ] |56,00 |C6,00 |56,00 |C6,00 |56,00 |C6,00 |----- |D6,00 |*11
5E[ HOME ] |AE,00 |AE,00 |AE,00 |AE,00 |AE,00 |AE,00 |----- |----- |*8
60[ STOP ] |60,00 |60,00 |60,00 |60,00 |60,00 |60,00 |----- |60,00 |*12
60[ STOP ] |----- |----- |----- |----- |----- |----- |----- |----- |*13
61[ COPY ] |61,00 |61,00 |61,00 |61,00 |61,00 |61,00 |----- |61,00 |*14
61[ COPY ] |----- |----- |----- |----- |----- |----- |----- |----- |*15,*3
62[ f・1 ] |62,00 |82,00 |62,00 |82,00 |62,00 |82,00 |----- |92,00 |
63[ f・2 ] |63,00 |83,00 |63,00 |83,00 |63,00 |83,00 |----- |93,00 |
64[ f・3 ] |64,00 |84,00 |64,00 |84,00 |64,00 |84,00 |----- |94,00 |
65[ f・4 ] |65,00 |85,00 |65,00 |85,00 |65,00 |85,00 |----- |95,00 |
66[ f・5 ] |66,00 |86,00 |66,00 |86,00 |66,00 |86,00 |----- |96,00 |
67[ f・6 ] |67,00 |87,00 |67,00 |87,00 |67,00 |87,00 |----- |97,00 |
68[ f・7 ] |68,00 |88,00 |68,00 |88,00 |68,00 |88,00 |----- |98,00 |
69[ f・8 ] |69,00 |89,00 |69,00 |89,00 |69,00 |89,00 |----- |99,00 |
6A[ f・9 ] |6A,00 |8A,00 |6A,00 |8A,00 |6A,00 |8A,00 |----- |9A,00 |
6B[ f・10 ] |6B,00 |8B,00 |6B,00 |8B,00 |6B,00 |8B,00 |----- |9B,00 |
70[ SHIFT ] |70,00 |70,00 |70,00 |70,00 |70,00 |70,00 |70,00 |70,00 |*16
70[ SHIFT ] |----- |----- |----- |----- |----- |----- |----- |----- |*17
71[ CAPS ] |71,00 |71,00 |71,00 |71,00 |71,00 |71,00 |71,00 |71,00 |*18
71[ CAPS ] |----- |----- |----- |----- |----- |----- |----- |----- |*19
72[ カナ ] |72,00 |72,00 |72,00 |72,00 |72,00 |72,00 |72,00 |72,00 |*20
72[ カナ ] |----- |----- |----- |----- |----- |----- |----- |----- |*21
73[ GRPH ] |73,00 |73,00 |73,00 |73,00 |73,00 |73,00 |73,00 |73,00 |*22
73[ GRPH ] |----- |----- |----- |----- |----- |----- |----- |----- |*23
74[ CTRL ] |74,00 |74,00 |74,00 |74,00 |74,00 |74,00 |74,00 |74,00 |*24
74[ CTRL ] |----- |----- |----- |----- |----- |----- |----- |----- |*25
---------------+------+------+------+------+------+------+------+------+-----
*1:ハイレゾモード,新キーボード搭載機,V30HL,V33A搭載機
*2:8086・V30搭載機,PC-9801VX2・VX21・UX,PC-98XL・XL^2のノーマルモード
(一部の機種では、[`]の刻印はあるが入力できない)
*3:PC-98LTには、[BS],[ROLL UP],[ROLL DOWN],[DEL],[HELP],[COPY]キーがないが、
次の操作で代用できる。
[BS],[DEL] =[DEL BS]
[HELP] =[CTRL]+[SHIFT]+[H]
[ROLL UP] =[CTRL]+[SHIFT]+[↑]
[ROLL DOWN]=[CTRL]+[SHIFT]+[↓]
[COPY] =[CTRL]+[SHIFT]+[P]
*4:ノーマルモード
*5:ハイレゾモード
*6:PC-98LTのみ
*7:PC-98XA・XL・XL^2以外
*8:PC-98XA・XL・XL^2
*9:PC-9801初代・E・F・M以外
*10:新キーボード搭載機
*11:PC-98XA・XL・XL^2のハイレゾモード
*12:ハイレゾモードでINT 06h発生キーを他キーに定義したとき
*13:ノーマル,PC-98LT・HAのときと、ハイレゾモードでINT 06h発生キーとして定義したとき
*14:ハイレゾモードでINT 05h発生キーを他キーに定義したとき
*15:ノーマル,PC-98LT・HAのときと、ハイレゾモードでINT 05h発生キーとして定義したとき
*16:ハイレゾモードでSHIFTキーコードを他キーに定義したとき
*17:ノーマル,PC-98LT・HAのときと、ハイレゾモードでSHIFTキーとして定義したとき
*18:ハイレゾモードでCAPSキーコードを他キーに定義したとき
*19:ノーマル,PC-98LT・HAのときと、ハイレゾモードでCAPSキーとして定義したとき
*20:ハイレゾモードでカナキーコードを他キーに定義したとき
*21:ノーマル,PC-98LT・HAのときと、ハイレゾモードでカナキーとして定義したとき
*22:ハイレゾモードでGRPHキーコードを他キーに定義したとき
*23:ノーマル,PC-98LT・HAのときと、ハイレゾモードでGRPHキーとして定義したとき
*24:ハイレゾモードでCTRLキーコードを他キーに定義したとき
*25:ノーマル,PC-98LT・HAのときと、ハイレゾモードでCTRLキーとして定義したとき
* -----はそのシフト状態のときに押してもデータの入力が行われないことを
意味する。
* 左右のシフトキーは、どちらが押されたのかを区別することはできない。
* フルキー側のリターンキーとテンキー側のリターンキーは、どちらが
押されたのかを区別することはできない。
* ラップトップ、ノート等では、テンキーボードからの入力と、[NUM]キー
ONの状態でテンキーモードになった本体側のキーからの入力を
区別することはできない。
* ラップトップ、ノート等の[NUM]キーは、キーボードBIOSが制御せずハードウェアで
管理しているため、キー番号は与えられていない。BIOS、システム共通域から
[NUM]キーのON/OFF状態を取得することはできない。
新キーボードの場合、キーボードへの下りコマンドを発行することで
取得できる。新キーボードでない場合は、取得する方法はない。
* シフト系キー,[STOP],[COPY]はキーバッファには入らないので、
INT 18h - Function 00h,01h,05h,07h,08hでキーデータを取得することは
できないが、INT 18h - Function 04hで押下を認識することはできる。
[COPY],[STOP]が押されるとキーボードBIOSはINT 05h,06hを実行する。
ただし、ハイレゾモードでは、シフト系キーおよびINT 05h,06hを発生
させるキーを再定義できるので、その場合は[SHIFT],[CAPS],[カナ],
[GRPH],[CTRL],[STOP],[COPY]キーもキーバッファに入る。
* PC-98XL・XL^2で、[CLR],[HOME]の動作はノーマル,ハイレゾとも同じ。
表 オートリピートを行わないキー一覧
--------------------------------
[f・1]〜[f・10]
[vf・1]〜[vf・5]([f・11]〜[f・15])
[INS]
[SHIFT]
[CAPS]
[カナ]
[GRPH]
[CTRL]
--------------------------------
INT 18h - Function 00h
分類 KEYBOARD BIOS
名前 キーデータの読み出し(1文字の入力待ち)
対象 ノーマル,ハイレゾ,PC-98LT・HA
入力 AH=00h
出力 AH=キーコード
AL=キーデータ
■[ハイレゾ]
AX=FFFFh : キー入力がない状態で終了した(解説参照)
解説 o キーバッファから1文字分のキー入力データを取り出し、キーコードと
キーデータを出力する(キーコード、キーデータについては、
表[キーコード・キーデータ]を参照)。
キーバッファ内にキー入力データがなければ、キーが押されるまで終了
しない。ただし、ハイレゾの場合はあとに説明する特別な場合に、キーが
押されなくても終了することがある。このとき、AX=FFFFhになっている。
u 98NOTEとPC-98HAでは、キー入力待ちのループ時に消費電力を低減するため、
以下のような処理を行っている。
98NOTE HLTを実行
PC-98HA INT 1Fh - Function B9hの実行
u ハイレゾモードでは、マルチタスク対応のためと称して、キー入力待ちの際に
INT 1Fh - Function 8000hを実行する場合がある。このとき、キー入力が
なくてもこのファンクションが終了することがある。
どのような条件でこのようなことが起こるのかを具体的に説明するため、
以下にハイレゾーモードにおけるこのファンクションの処理手順を示す。
1. このファンクションが呼び出された時点で、キーバッファ内にキー
入力データがあったときは、そのデータをキーコード・キーデータに
変換する。変換した結果がキー入力を発生させるデータだったときには、
AXレジスタにキーコード・キーデータを格納して終了する。
2. キーバッファ内にキー入力データがないか、あってもキー入力を
発生させないデータ(たとえば[CTRL]+[1]など)のみが格納されて
いた場合、INT 1Fh - Function 8000hを実行する。
3. INT 1Fh - Function 8000hからCF=0でリターンしたときは、キーが
押されるまで(キーバッファ内にキー入力データが入るまで)ループ
する。キーが押されたら、1.に戻る。ループの間、INT 1Fhは実行しない。
4. INT 1Fh - Function 8000hからCF=1でリターンした場合、その時点で
キーバッファ内にキー入力データがあった(INT 1Fh実行中にキーが
押された)ときは、1.に戻る。
5. INT 1Fh - Function 8000hからCF=1でリターンした場合、その時点で
キーバッファ内にキー入力データがなかった(INT 1Fh実行中にキーが
押されなかった)ときは、AX=FFFFhで終了する。
関連 0000:0502〜0521h
0000:0524〜0525h
0000:0528h
表[キーコード・キーデータ]
0000:0410〜0413h[ハイレゾ]
0000:0522h[ハイレゾ]
INT 1Fh - Function 8000h[ハイレゾ]
INT 18h - Function 01h
分類 KEYBOARD BIOS
名前 キーバッファ状態のセンス
対象 ノーマル,ハイレゾ,PC-98LT・HA
入力 AH=01h
出力 BH=キー入力データの有無
00h: キー入力データがない
01h: キー入力データがある
BH=01hのとき
AH=キーコード
AL=キーデータ
BH=00hのとき
AX=不定
解説 o キーバッファ内の先頭1文字分のキー入力データを参照し、キーコードと
キーデータを出力する(キーコード、キーデータについては、
表[キーコード・キーデータ]を参照)。
キーバッファにキー入力データがなければ、すぐに終了する。
このファンクションを実行してもキーバッファ内のキー入力データ数は
変化しない。
関連 0000:0502〜0521h
0000:0524〜0525h
0000:0528h
表[キーコード・キーデータ]
0000:0410〜0413h[ハイレゾ]
0000:0522h[ハイレゾ]
INT 18h - Function 02h
分類 KEYBOARD BIOS
名前 シフトキー状態のセンス
対象 ノーマル,ハイレゾ,PC-98LT・HA
入力 AH=02h
出力 AL=シフト状態
bit 7〜5:000b
bit 4:[CTRL]
bit 3:[GRPH]
bit 2:[カナ]
bit 1:[CAPS]
bit 0:[SHIFT]
1= ON
0= OFF
AH=不定
解説 o キーバッファとは無関係に、このファンクション実行時点でのシフト系
キー([CTRL],[GRPH],[カナ],[CAPS],[SHIFT])の押下状態を返す。
o ハイレゾモードでは、シフトキーコードテーブル(0000:0408h)を書き
換えるとシフトキーを変更することができる。この場合、各ビットに
対応するシフトキーは、シフトキーコードテーブルの定義に従う。表は
デフォルトのシフトキーの場合を示している。
関連 0000:053Ah
0000:0408〜040Fh[ハイレゾ]
INT 18h - Function 03h
分類 KEYBOARD BIOS
名前 キーボードインターフェースの初期化
対象 ノーマル,ハイレゾ,PC-98LT・HA
入力 AH=03h
出力 AX=不定
解説 o キーボードBIOSが使用するシステム共通域、キーボードインターフェースの
8251Aを初期化して、キーボードにリセット信号を送る。
キーバッファはクリアされる。
u 初期化されるワークエリアを「関連」の項目に示した。
ハイレゾモードでは、シフトキーコードテーブル(0000:0408h)、
キーバッファ開始アドレス(0000:0410h)とキーバッファサイズ(0000:0522h)、
内部割り込みキー設定テーブルアドレス(0000:0418h)の初期化は行わない。
o キーボードは、リセット信号を受信するとキーの押下状態を再送信して
くるため、各種押下状態を示すワークエリアは正しく再設定される。
なお、キーボードのリセット信号は、CPUのリセット信号とは異なるもので、
キーボードのみをリセットする信号である。
関連 ■[ノーマル,PC-98LT・HA]
0000:0522h
0000:0524h
0000:0526h
0000:0528h
0000:0529h
0000:052A〜0539h
0000:053Ah
■[ハイレゾ]
0000:0524h
0000:0526h
0000:0528h
0000:0529h
0000:052A〜0539h
0000:053Ah
INT 18h - Function 04h
分類 KEYBOARD BIOS
名前 キー入力状態のセンス
対象 ノーマル,ハイレゾ,PC-98LT・HA
入力 AH=04h
AL=キーコードグループ番号(00〜0Fh)
出力 AH=キーの状態
* 各ビットとも1=ON, 0=OFF
AL=不定
解説 o キーバッファとは無関係に、本ファンクション実行時点のキーの押下状態を
返す。
各キーに対応するキーコードグループ番号とビットの対応を
表[キーコードグループ番号と対応するキー]に示す。
u PC-9800のキーボードは、押し続けるとキーボード側でリピートを行う
ため、キーが押されているにもかかわらず、ソフトウェアからは
押されていないように見える期間がある。なお、シフト系キー、
ファンクションキー、[INS]キーはリピートを行わない。
「PC-9801スーパーテクニック」(アスキー出版局刊)キーボード編に
リピートに関する詳細な記述がある。
o 本来その機種が持っていないキーを押したとき(旧キーボード用の機種
に新キーボードを繋いでvfキーを押すなど)、INT 18h - Function
00h,01h,05h,07h,08hではキー入力を認識することはできないが、
このファンクションでは押下を認識することができる。
o ハイレゾモードで、シフトキーコードテーブル(0000:0408〜040Fh)、
キーデータ変換テーブル(0000:0414hの指すアドレス)を変更しても、
このファンクションの動作には影響を与えない。
関連 0000:052A〜0539h
表 キーコードグループ番号と対応するキー
-------+-------+-------+-------+-------+-------+-------+-------+-------
グループ bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
番号
-------+-------+-------+-------+-------+-------+-------+-------+-------
00h 7' 6& 5% 4$ 3# 2" 1! ESC
ヤャ オォ エェ ウゥ アァ フ ヌ
01h TAB BS ¥| ^` -= 0 9) 8(
ー ヘ ホ ワヲ ヨョ ユュ
02h I U Y T R E W Q
ニ ナ ン カ ス イ テ タ
03h D S A RETURN [{ @‾ P O
シ ト チ セ ラ
04h :* ;+ L K J H G F
ケ レ リ ノ マ ク キ ハ
05h M N B V C X Z }]
モ ミ コ ヒ ソ サ ツッ ム」
06h ROLL ROLL XFER SPACE _ /? .> ,<
DOWN UP ロ メ・ ル。 ネ。
07h HELP HOME ↓ → ← ↑ DEL INS
CLR
08h 5 4 * 9 8 7 / -
09h , 0 = 3 2 1 + 6
0Ah vf・5 vf・4 vf・3 vf・2 vf・1 NFER .
0Bh HOME
0Ch f・6 f・5 f・4 f・3 f・2 f・1 COPY STOP
0Dh f・10 f・9 f・8 f・7
0Eh CTRL GRPH カナ CAPS SHIFT
0Fh
-------+-------+-------+-------+-------+-------+-------+-------+-------
* 機種毎のキーボードの差異については表[キーコード・キーデータ]参照
INT 18h - Function 05h
分類 KEYBOARD BIOS
名前 バッファからのキーコード読み出し(1文字入力)
対象 ノーマル,ハイレゾ,PC-98LT・HA
入力 AH=05h
出力 BH=キー入力データの有無
00h: キー入力データがない
01h: キー入力データがある
BH=01hのとき
AH=キーコード
AL=キーデータ
BH=00hのとき
AX=不定
解説 o キーバッファから1文字分のキー入力データを取り出し、キーコードと
キーデータを出力する(キーコード、キーデータについては、
表[キーコード・キーデータ]を参照)。
キーバッファにキー入力データがなければ、すぐに終了する。
u テクニカルデータブックではハイレゾのみとなっているが、実際は
ノーマル,PC-98LT・HAでも使用可能。
関連 0000:0502〜0521h
0000:0524〜0525h
0000:0528h
表[キーコード・キーデータ]
0000:0410〜0413h[ハイレゾ]
0000:0522h[ハイレゾ]
INT 18h - Function 06h
分類 KEYBOARD BIOS
名前 バッファの初期化
対象 ハイレゾ
入力 AH=06h
出力 AX=不定
解説 o キーバッファをクリアして先行入力を取り消す。
o キーバッファ開始アドレス(0000:0410h)、キーバッファサイズ(0000:0522h)
を変更したときは、必ずこのファンクションを実行しなければならない。
INT 18h - Function 03hを実行しても構わないが、キーボードをリセット
するため、このファンクションに比べて実行時間が長い。
関連 0000:0410h
0000:0524h
0000:0526h
0000:0528h
INT 18h - Function 07h
分類 KEYBOARD BIOS
名前 シフト状態とキーデータの読み出し(1文字の入力待ち)
対象 ハイレゾ
入力 AH=07h
出力 AH=キーコード
AL=キーデータ
AX=FFFFh : キー入力がない状態で終了した
BL=シフト状態
解説 o キーバッファから1文字分のキー入力データを取り出し、キーコードと
キーデータ、そのキーが押された時点でのシフト状態を出力する。
シフト状態も出力すること以外、INT 18h - Function 00hと同じ。INT 18h
- Function 00hの解説を参照。
シフト状態は、INT 18h - Function 02hを参照。
関連 INT 18h - Function 00h
INT 18h - Function 02h
INT 18h - Function 08h
分類 KEYBOARD BIOS
名前 シフト状態とキーデータのセンス
対象 ハイレゾ
入力 AH=08h
出力 BH=キー入力データの有無
00h: キー入力データがない
01h: キー入力データがある
BH=01hのとき
AH=キーコード
AL=キーデータ
BH=00hのとき
AX=不定
解説 o キーバッファ内の先頭1文字分のキー入力データを参照し、キーコードと
キーデータ、シフト状態を出力する。
シフト状態も参照できること以外、INT 18h - Function 01hと同じ。
INT 18h - Function 01hの解説を参照。
シフト状態は、INT 18h - Function 02hを参照。
u '92年版テクニカルデータブックには、出力時のBHレジスタに関する記述が
ない。
関連 INT 18h - Function 01h
INT 18h - Function 02h
INT 18h - Function 09h
分類 KEYBOARD BIOS
名前 キーデータの作成
対象 ハイレゾ
入力 AH=09h
AL=キー番号(00〜7Fh)
BL=シフト状態
* デフォルトのキーデータ変換テーブルを利用する場合は00〜1Fh
出力 AH=キーコード
AL=キーデータ
■AL=FFhのとき
AH=不定
与えられたキー番号とシフト状態の組み合わせではキー入力が
行われない。または、与えられたキー番号を持つキーは存在しない。
解説 o キー番号とシフト状態をキーコードとキーデータに変換する。
キーデータ変換テーブルアドレス(0000:0414〜0417h)で指定された
テーブルを用いて変換する。
シフト状態は、INT 18h - Function 02hを参照。
u '92年版テクニカルデータブックには、BLが壊れるという記述があるが、
実際には変化しない。
u シフトキーコードテーブル(0000:0408〜040Fh)または、キーボード割り込み
テーブル(0000:0418hが指すアドレス)で定義されているキーは、実際には
INT 18h - Functioin 00h等でキーコードの取得ができない。しかし、
このファンクションでは、そのようなキー番号を指定したときでも
キーコード・キーデータに変換される。
u デフォルトのキーデータ変換テーブル(0000:0414hが指すアドレス)は、
5個(5ビット)のシフト系キーをサポートするように作成されている。
デフォルトのキーデータ変換テーブルを使用する場合は、シフト状態(BL)
のbit 4〜0にだけシフト状態を設定する。bit 7〜5に000b以外の値を設定
すると無意味なデータが返される。
関連 0000:0414〜0417h
INT 18h - Function 02h
表[キーコード・キーデータ]